A graphics processing unit (GPU) processes and renders graphical objects as picture elements, or “pixels,” on a display device. In computer graphics, a 3D graphical object is often represented by a combination of primitives such as points, lines, polygons, and higher order surfaces. To render a particular scene, the primitives are rasterized individually into a 2D image of pixels. Because there are often thousands, millions, or even hundred millions of primitives in a complex 3D scene, the complete rasterization of each primitive individually can result in suboptimal system performance. Conventional graphics systems suffer from repeated color and depth value reads and writes from memory as the rasterization process moves from one primitive to the next. Immediate shading of rasterized pixels causes unnecessary processing overhead and overall inefficient use of system memory bandwidth.
Deferred rendering refers to the accumulation of multiple primitives, potentially from multiple graphical objects in a scene, before these primitives are rendered in one rendering pass. One approach to deferred rendering is to divide a display space into multiple areas. The primitives accumulated from multiple graphical objects in a frame can be rendered area by area, instead of primitive by primitive, to reduce the amount of memory access. Using deferred rendering can significantly improve system performance, especially in mobile devices where power and system bandwidth are at a premium.